package org.ix.dynamicapis.service;

import org.ix.dynamicapis.model.PageList;
import org.ix.dynamicapis.model.request.ApiAddRequest;
import org.ix.dynamicapis.model.request.ApiPatchRequest;
import org.ix.dynamicapis.model.request.ApiQueryRequest;
import org.ix.dynamicapis.model.request.ApiSaveRequest;
import org.ix.dynamicapis.model.response.ApiDetailResponse;
import org.ix.dynamicapis.model.response.ApiListItemResponse;

import java.util.Collection;
import java.util.List;

/**
 * 接口配置业务逻辑
 *
 * @author 郗世豪（rarexixi@gmail.com）
 */
public interface ApiService {

    /**
     * 添加接口配置
     *
     * @param addRequest 接口配置
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiDetailResponse add(ApiAddRequest addRequest);

    /**
     * 批量添加接口配置
     *
     * @param list 接口配置列表
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int batchAdd(Collection<ApiAddRequest> list);

    /**
     * 删除接口配置
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int delete(ApiPatchRequest patchRequest);

    /**
     * 禁用接口配置
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int disable(ApiPatchRequest patchRequest);

    /**
     * 启用接口配置
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int enable(ApiPatchRequest patchRequest);

    /**
     * 根据接口ID更新接口配置
     *
     * @param saveRequest 保存接口配置请求实体
     * @return 更新后的接口配置详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiDetailResponse updateById(ApiSaveRequest saveRequest);

    /**
     * 根据接口ID获取接口配置详情
     *
     * @param id 接口ID
     * @return 接口配置详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiDetailResponse getById(Integer id);

    /**
     * 获取接口配置列表
     *
     * @param queryRequest 搜索条件
     * @return 符合条件的接口配置列表
     */
    List<ApiListItemResponse> getList(ApiQueryRequest queryRequest);

    /**
     * 分页获取接口配置列表
     *
     * @param queryRequest 搜索条件
     * @param pageNum      页码
     * @param pageSize     分页大小
     * @return 符合条件的接口配置分页列表
     */
    PageList<ApiListItemResponse> getPageList(ApiQueryRequest queryRequest, Integer pageNum, Integer pageSize);
}
